import { enUS } from './en-us';
import { zhCN } from './zh-cn';
import { zhTW } from './zh-tw';
import { localForage } from '../localforage';
import { EventBus } from '../eventbus/EventBus';
import { I18nLocale, Language } from '../interface/i18n';

/**
 * 全局唯一 I18n 对象
 * 需要实现 antDesign 的 i18n 语言包，这样 select data-picker 等组件才能实现语言包切换
 * 详情请查阅 ： https://www.antdv.com/components/config-provider-cn#components-config-provider-demo-locale
 */

class I18n extends EventBus<{ change: (language: Language) => void }> {
	private language: Language; // 定义当前的 language

	constructor() {
		super();
		// 从 localStorage 中获取当前语言
		this.language = <Language>localForage.getItem('language') || 'zh-cn';
	}

	// 获取当前语言
	public getLanguage() {
		return this.language;
	}

	// 设置当前语言
	public setLanguage(value: Language) {
		this.language = value;
		// 存储到 localStorage
		localForage.setItem('language', value);
		// 派发事件实现语言更新
		this.emit('change', value);
	}

	// 获取当前语言包
	public getLocale(): I18nLocale {
		const languageMap = { 'zh-cn': zhCN, 'zh-tw': zhTW, en: enUS };
		return languageMap[this.language] || zhCN;
	}
}

export const i18n = new I18n();
